A typical computer system includes a processor for executing instructions, a memory for storing the instructions executed by the processor and the results of the execution of instructions, an input peripheral that permits a user to interact with the system (e.g., keyboard, mouse etc.), an output peripheral that also allows a user to interact with the system (e.g., monitor, printer etc.), and a storage peripheral (e.g., disk drive, tape drive etc.) that provides data storage beyond that provided by the memory. When the computer system is in operation, the memory typically contains at least portions of two programs, an operating system program and an application program (e.g., a spreadsheet program). The operating system program provides a number of functions, including functions associated with the management of files, directories of files, and the input and output peripherals associated with computer system. If the application program requires the performance of any of these functions (e.g., the output of information to a video monitor), the application program submits a request to the operating system for the desired function and the operating system carries out whatever operations are required to implement the function.
On a larger scale, computer systems are commonly connected to one another to form computer networks. Common networks include local area networks (LANs) in which the computer systems that are networked together are distributed over a relatively small area, such as within an office or a building. Another common network is a wide area network (WAN) in which the computer systems that are part of the network are distributed over a relatively large area. As a consequence, third party communication systems (e.g., telephone and satellite) are commonly required to implement a wide area network.
A fundamental advantage of a computer network is that one computer system can write data to or read data from a memory device associated with another computer system within the network. However, before computer systems could be networked together and read and write data in this manner, certain limitations inherent in the “local” nature of many of the operating systems installed in the computer systems had to be overcome. To elaborate, many operating systems are only capable of processing requests for communications with memory devices that are associated with the computer system with which the operating system is associated, i.e., “local” memory devices. As a consequence, these operating systems were incapable of processing requests for communications with a “remote” memory device, i.e., a memory device that is not associated with the computer system with which the operating system was associated. To overcome this limitation, “virtual device drivers” were conceived.
Generally, a virtual device driver functions so as to make a remote memory device appear to be a local memory device to the operating system of a computer system and manages communications with a remotely located memory device. The virtual device driver is also comprised of two components, an initiating virtual device driver that is associated with the computer system that is initiating a communication with a remote memory device and a target virtual device driver that is associated with the computer system with which the remote memory device is associated. In many cases, the “initiating” computer system has memory devices that are remote relative to the “target” computer system and that the “target” computer system would want to access. In such cases the virtual device drivers associated with the computer systems are typically capable of reversing roles, i.e., an initiating virtual device driver also functions as a target virtual device driver and vice versa.
To make a remote memory device appear to an operating system to a local memory device, the “initiating virtual device driver” communicates with the operating system of a computer system in the same manner that a local memory device communicates with the operating system. However, to manage communications with a remote memory device, the “initiating virtual device driver” communicates with the portion of a computer system that is responsible for conducting communications with other computer systems in a computer network over a network communication infrastructure (e.g., copper cable, fibre optic cable, radio channel etc.). This portion of the computer system is typically referred to as a network interface and is commonly implemented in the form of a network interface card. In any case, the initiating virtual device driver provides communications that are to be sent to a remote memory device to the network interface, which encapsulates the communication according to the protocol for transmitting the communication over the network communication infrastructure. For example, the network interface could encapsulate the communication under the TCP/IP protocol for transmission over the Internet. In the case of communications received from the remote memory device in response to communication initiated by the initiating computer system, the network interface strips the communication of the network infrastructure protocol information and then provides the communication to the initiating virtual device driver. The initiating virtual device driver then transmits the communication to the operating system for any further processing.
The target virtual device driver in the target computer system (i.e., the computer system with which the remote memory device is associated) operates in much the same manner as the initiating virtual device driver. To elaborate, the network interface of the target computer system strips communications from the initiating computer system and then provides the communications to the target virtual device driver. In response, the target virtual device driver conveys the communication on to the remote memory device. Any response from the remote memory device is provided to the target virtual device driver, which causes the response to be conveyed to the network interface. The network interface then operates to encapsulate the response or communication for transmission over the network infrastructure to the initiating computer system.
Typically, the “virtual device drivers” employed in computer networks are device protocol dependent. For example, if the remote memory device is a SCSI disk drive, the “initiating virtual device driver” in the initiating computer implements the complete SCSI command set necessary to communicate with the remote SCSI disk drive. For example, if the application executing on the initiating computer requires data to be read from a remote SCSI disk drive, the initiating virtual device driver on the initiating computer operates so as to cause all of the necessary SCSI commands needed to implement the read operation to be communicated over the network infrastructure and, if necessary process any responses to the commands. This may involve several communications over the network. For example, the first communication could be a status request to insure that SCSI the disk drive is operating; the second command could be a request for access to the drive; the third command could be a seek command to move a read head to the track on which the desired data is located.
This system for transferring data between computer systems in a network has worked adequately for some time because the network infrastructure has been considerably slower in transferring data between the computer systems than the operating system associated with the target computer system has been able to cause data to be moved to or from a remote memory device associated with the target computer system. Stated differently, target computer systems and, in particular, the operating system of the target computer system have been capable of causing data to be transferred to other computer systems in a computer network at a speed that substantially utilizes the available bandwidth of the network infrastructure.
Recently, however, the bandwidth or speed of network infrastructure has increased dramatically. As a consequence, the network infrastructure is no longer the slowest element in the transfer of data between one computer system and another computer system in a computer network. Instead, the target computer system and, more specifically, the operating system of the target computer system has become the slowest element. To elaborate, because the operating system associated with the target computer system is typically processing requests from one or more application programs running on the system, managing the peripherals, and performing other tasks, the operating system can only devote a portion of its time to processing data transfers with other computer systems in the network. Further, the time that the operating system can devote to such transfers is now, usually insufficient to fully utilize the bandwidth or speed at which the network infrastructure is capable of transporting data.
As a consequence of the operating system limitation associated with transferring data between computer systems in computer network that utilize high speed network infrastructures, a new type of storage system or device has evolved, namely, a network attached storage device. A network attached storage system or device is a computer system that is dedicated to the function of data storage. Consequently, the operating system associated with the network attached storage device does not spend any time, like conventional computer systems, directly servicing requests from application programs and the like. This, in turn, makes network attached storage devices able to transfer data to other computer systems in a network must faster than the typical, conventional computer system. Moreover, when a network storage device is installed in a computer network, the device is provided with its own address within the network and is, therefore, directly accessible to the other computer systems in the network. This direct accessibility also translates into improved data transfer rates.